// hi its me ALT F4
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
typedef vector<ll>vl;
typedef deque<ll>dq;
typedef pair<ll,ll>pl;
#define endl '\n'
#define all(a) (a).begin(),(a).end()
#define allr(a) (a).rbegin(),(a).rend()
#define fi first
#define se second
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back
#define rep(i,n,m) for(ll i = (n); i < (ll)(m); i++)
#define rrep(i,n,m) for(ll i = (ll)(m) - 1; i >= (ll)(n); i--)
#define no cout<<"NO"<<"\n";
#define yes cout<<"YES"<<"\n";
const ll MOD1 = 1e9+7;
const ll MOD9 = 998244353;
const ll INF = 1e18;
const ld pi = 3.1415926535897932384626433832795;
int gcd(int a, int b)
{
if (a == 0 || b == 0)
return 0;
while (b != 0)
{
int tmp;
tmp = a % b;
a = b;
b = tmp;
}
return a;
}
ll binexp(ll a, ll k,ll mod=MOD1){
ll ans = 1;
while (k){
if (k & 1) ans = (ans * a) % mod;
a = (a * a) % mod;
k >>= 1;
}
return ans;
}
string to_bin(ll n){
string ch="";
ll i = 0;
while (n>0) {
char a=n%2+'0';
ch=a+ch;
n = n / 2;
i++;
}
return ch;
}
ll to_dec(string ch){
ll res=0;
for (ll i=ch.size()-1;i>=0;i--){
ll a=ch[i]-'0';
ll p=ch.size()-i-1;
if(a)res+=binexp(2,p,MOD1);
//DONT'T FORGET THE MOD
}
return res;
}
ll C(ll n,ll r){
ll p=1,k=1;
if(r>n)return 0;
if (n-r<r)r=n-r;
if(r!=0){
while(r){
p*=n;
k*=r;
ll m =__gcd(p,k);
p/=m;
k/=m;
n--;
r--;
}
}
return p;
}
bool estentier(long double nombre) {
ll entier = (ll)nombre;
return (nombre - entier == 0);
}
ll estpremier(ll nombre) {
if (nombre < 2) return false;
for (int i = 2; i<=sqrt(nombre); i++) {
if (nombre % i == 0) return false;
}
return 1;
}
ll sum_digit(ll n){
ll s=0;
while(n/10!=0){
s+=(n%10)*(n%10);
n=n/10;
}
s+=n*n;
return s;
}
ll factoriel(ll N)
{
if(N<=1)
return 1;
else
return(N*factoriel(N-1))%MOD9;
}
bool comparePairs(const std::pair<ll, ll>& pair1, const std::pair<ll, ll>& pair2) {
if (pair1.first != pair2.first) {
return pair1.fi > pair2.fi; // Sort by the first element in ascending order
}
else {
return pair1.se < pair2.se; // Sort by the second element in ascending order
}
}
bool comparePairs2(const std::pair<ll, ll>& pair1, const std::pair<ll, ll>& pair2) {
if (pair1.first != pair2.first) {
return pair1.first > pair2.first; // Sort by the first element in ascending order
}
else {
return pair1.second < pair2.second; // Sort by the second element in ascending order
}
}
ll ppcm(ll X,ll Y)
{
ll A=X;
ll B=Y;
while (A!=B)
{
while (A>B) B=B+Y;
while (A<B) A=A+X;
}
return A;
}
ll maxSubArraySum(ll a[], ll n)
{
int max_so_far = INT_MIN, max_ending_here = 0;
for (int i = 0; i < n; i++) {
max_ending_here = max_ending_here + a[i];
if (max_so_far < max_ending_here)
max_so_far = max_ending_here;
if (max_ending_here < 0)
max_ending_here = 0;
}
return max_so_far;
}
/*bool isPermutation(vector<ll> a,ll n) {
for (int i = 0; i < n; ++i) {
if (a[i] <= 0 || a[i] > n) {
return false;
}
}
set<ll> s(a.begin(), a.end());
return (s.size()== n);
}*/
ll combinaison(ll n, ll p) {
if(p == 0 || p == n)
return 1;
if(0 < p && p < n)
return combinaison(n-1, p-1)%MOD9 + combinaison(n-1, p)%MOD9;
return 0;
}
bool isPalindrome(const std::string &str) {
std::string reversed = str;
std::reverse(reversed.begin(), reversed.end());
return str == reversed;
}
/*******************SIEVE & GRAPH & DIJEKSTRA**********************/
const int N=300001;
vector<bool> prim(N,true);
void sieve()
{
rep(i,2,N)
{
if(prim[i])
{
for(int j=2;j*i<N;j++)prim[i*j]=false;
}
}
}
vector<vector<ll>> graph(N+1);
bool vis[N];
vector<bool> parent(N+1,false);
//vector<ll> leaf(N+1,1);
//vector<ll> dist(N+1);
ll c1=0,c2=0;
void dfs(ll a)
{
vis[a]=true;
parent[a]=true;
c1++;
for(auto e: graph[a])
{
dfs(e);
}
parent[a]=false;
//if(a==2)cout<<"here"<<endl;
}
bool cycle=false;
void detectcycle(ll a)
{ if(cycle)return;
parent[a]=true;
for(auto e:graph[ a ])
{
if(parent[e]){cycle=true; break;}
}
parent[a]=false;
}
/* void dijkistra(int node,int n)
{
priority_queue<pl, vector<pl>, greater<pl>> pq;
for (int i=0 ; i<n ; i++)
{
if (i == node)
dist[i]=0;
else
dist[i] = INF;
}
pq.push({dist[node], node});
while(!pq.empty())
{
pl parent = pq.top();
pq.pop();
int h = parent.first;
ll index = parent.second;
if (h>dist[index])
continue;
for (auto childPair:graph[index])
{
ll child = childPair.first;
ll dFromParentToChild = childPair.second;
if (dist[child]>dist[index]+dFromParentToChild)
{
dist[child] = dist[index]+dFromParentToChild;
pq.push({dist[child], child});
}
}
}
}
*/
long long calc(pair<long long, long long> a[], pair<long long, long long> b[], pair<long long, long long> c[], int n) {
long long ans = 0;
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
for (int l = 0; l < 3; l++) {
if (a[j].second != b[k].second and a[j].second != c[l].second and b[k].second != c[l].second) {
ans = max(ans, a[j].first + b[k].first + c[l].first);
}
}
}
}
return ans;
}
bool estOrdinaire(long long nombre) {
// Convertir le nombre en une chaîne de caractères
std::string nombreStr = std::to_string(nombre);
// Utiliser un ensemble pour stocker les chiffres uniques
std::unordered_set<char> chiffres;
// Parcourir chaque chiffre dans la chaîne
for (char chiffre : nombreStr) {
chiffres.insert(chiffre);
}
// Vérifier si tous les chiffres sont les mêmes
return chiffres.size() == 1;
}
struct CompareCost {
bool operator()(long long a, long long b) {
return a < b;
}
};
void solve() {
long long n;
cin >> n;
string s;
cin>>s;
set<char> sett;
long long res =0;
for(char e:s){
sett.insert(e);
res += sett.size();
}
cout<<res<<endl;
}
//lets start the game
int main()
{
// Setting up input/output stream and precision.
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout << fixed << setprecision(15);
int t;
cin >>t;
while (t--)
{
solve();
}
return 0;
}
622. Design Circular Queue | 814. Binary Tree Pruning |
791. Custom Sort String | 787. Cheapest Flights Within K Stops |
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |
435. Non-overlapping Intervals | 406. Queue Reconstruction by Height |
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |
368. Largest Divisible Subset | 377. Combination Sum IV |
322. Coin Change | 307. Range Sum Query - Mutable |
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |